package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.*;
import com.ipartek.formacion.gestformwww.modelo.beans.*;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author equipoA
 */
public class VisualizarConvocatoriaAccion implements Accion {

    private final String listarConvocatorias = "listar-convocatorias-accion";
//    private final String listarCandConv = "lista-candconv";
//    private final String visualizarConvocatoria = "visualiza-convocatoria";
    // private boolean isAction=false;

    /**
     * Carga los datos del curso y llama a las acciones de la pestaña correspondiente
     * @param servlet
     * @param request
     * @param response
     * @return Devuelve el router que llevara el nombre de la jsp que corresponda
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {

        HttpSession sesion;
        String contenido = null;
        AccionServlet as = (AccionServlet) servlet;
        sesion = request.getSession();
        AccionRouter router;
        ArrayList<Candidato> candidatos = new ArrayList();
        ModeloConvocatoria modelo = (ModeloConvocatoria) servlet.getServletContext().getAttribute("ModeloConvocatoria");
        ModeloCandidato modeloCandidato = (ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");
        ModeloCurso modeloCurso = (ModeloCurso) servlet.getServletContext().getAttribute("ModeloCurso");
        Curso curso = null;
        Convocatoria convocatoria = null;
        ResourceBundle rb = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");
        ArrayList<TipoCurso> tiposcurso = new ArrayList<TipoCurso>();
        ArrayList<String> lugares = new ArrayList<String>();
        Integer id = -1;
        int numerocandidatos = 0;
        int numPags = 0;

//        if (sesion.getAttribute("usuario") == null) {
//            router = new AccionRouter("inicio", false);
//        } else {
//            router = new AccionRouter("principal");


        //Si el usuario esta logueado
        if (sesion.getAttribute("usuario") != null) {

            router = new AccionRouter("principal");
            /*
             * Si llega un idConvocatoria....Ver/modificar conv
             */
            if (Verificador.numeroValido(request.getParameter("idCon")) || (request.getAttribute("idCon") != null)) {
                if (request.getAttribute("idCon") != null) {
                    String idString = request.getAttribute("idCon").toString();
                    id = Integer.parseInt(idString);
                } else {
                    id = Integer.parseInt(request.getParameter("idCon"));
                }
                try {
                    convocatoria = modelo.visualizarConvocatoria(id);
                } catch (GestorFormacionExcepcion ex) {
                    sesion.setAttribute("excepciones", ex.getMessage());
                    Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (convocatoria != null) {
                    try {
                        try {
                            tiposcurso = modelo.listarTipoCurso();
                            lugares = modelo.listarLugares();
                        } catch (GestorFormacionExcepcion ex) {
                            Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                            sesion.setAttribute("excepciones", ex.getMessage());
                        }
                        request.setAttribute("title", "v/m");
                        request.setAttribute("visualizaConvocatoria", convocatoria);
                        request.setAttribute("listatipos", tiposcurso);
                        request.setAttribute("listalugares", lugares);
                        request.setAttribute("contenido", "visualiza-convocatoria");


                        int pestana = 0;
                        if (Verificador.numeroValido(request.getParameter("idPestanaCandidato"))) {
                            pestana = Integer.parseInt(request.getParameter("idPestanaCandidato"));
                        }

                        switch (pestana) {
                            default:
                                //path = visualizarcontactos;
                                FiltroCandidato filtro = new FiltroCandidato(rb);
                                filtro.setConvId(id);
                                filtro.setColumnaFiltrar(request.getParameter("filtroColumnaCont"));
                                filtro.setOrden(request.getParameter("filtroOrdenCont"));
                                if ((request.getParameter("RegistroPagina") != null)) {
                                    filtro.setElementospag(request.getParameter("RegistroPagina"));
                                }
                                if ((request.getParameter("id") != null)) {
                                    filtro.setPagsiguiente(request.getParameter("id"));
                                }
                                sesion.setAttribute("filtrocandidatos", filtro);
                                candidatos = modeloCandidato.listarCandidatos(filtro);
                                numerocandidatos = modeloCandidato.contarCandidatos(filtro);
                                numPags = filtro.getElementospag();
                                if (numerocandidatos == 0) {
                                    ResourceBundle errores = (ResourceBundle) servlet.getServletContext().getAttribute("errores-mapeo");
                                    request.setAttribute("error", errores.getString("error-sin-resultados"));
                                }
                                request.setAttribute("numeroCandidatos", numerocandidatos);
                                int totalpaginas = numerocandidatos / numPags;
                                if ((numerocandidatos % numPags) != 0) {
                                    totalpaginas++;
                                }
                                request.setAttribute("totalPagCandidatos", totalpaginas);
                                request.setAttribute("listaCandConv", candidatos);
                                request.setAttribute("contenido-convocatoria", "lista-candconv");
                                break;
                        }

                    } catch (GestorFormacionExcepcion ex) {
                        try {
                            router = as.getFactory().getAction(as.getNombreClaseRecurso(listarConvocatorias), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex1) {
                            Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        } catch (InstantiationException ex1) {
                            Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        } catch (IllegalAccessException ex1) {
                            Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        }
                    }
                } else {
                    try {
                        router = as.getFactory().getAction(as.getNombreClaseRecurso(listarConvocatorias), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                /*
                 * Si llega un idcurso....,  no muestra las pestañas, y se setean los
                 * campos de la convocatoria a partir del curso que llega
                 */
            } else if (Verificador.numeroValido(request.getParameter("idCurso")) || (request.getAttribute("idCurso") != null)) {
                if (request.getAttribute("idCurso") != null) {
                    id = Integer.parseInt(request.getAttribute("idCurso").toString());
                } else {
                    id = Integer.parseInt(request.getParameter("idCurso"));
                }
                try {
                    curso = modeloCurso.visualizarCurso(id);
                    convocatoria = new Convocatoria();
                    convocatoria.setConActiva(false);
                    convocatoria.setConNom(curso.getCurNom());
                    convocatoria.setTipoCur(curso.getTipoCur());
                    convocatoria.setCurID(id);
                    convocatoria.setCurNom(curso.getCurNom());
                    convocatoria.setConLugarImpart(curso.getCurLugarImpartido());
                    convocatoria.setConFechaInicioPrev(curso.getCurFchaInReal());
                    convocatoria.setConFechaFinPrev(curso.getCurFchaFinReal());
                    convocatoria.setConHoraInicio(curso.getCurHoraInicio());
                    convocatoria.setConHoraFin(curso.getCurHoraFin());
                    convocatoria.setConDuracion(curso.getCurDuracion());
                    convocatoria.setConDuracionMin(curso.getCurDuracionMinutos());
                    convocatoria.setConObservacion(curso.getCurObservacion());

                } catch (GestorFormacionExcepcion ex) {
                    sesion.setAttribute("excepciones", ex.getMessage());
                    Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (convocatoria != null) {
                    try {
                        try {
                            tiposcurso.add(convocatoria.getTipoCur());
                            lugares.add(convocatoria.getConLugarImpart());
                        } catch (Exception ex) {
                            sesion.setAttribute("excepciones", ex.getMessage());
                        }
                        request.setAttribute("title", "crear");
                        request.setAttribute("visualizaConvocatoria", convocatoria);
                        request.setAttribute("listatipos", tiposcurso);
                        request.setAttribute("listalugares", lugares);
                        request.setAttribute("contenido", "visualiza-convocatoria");

                    } catch (Exception ex) {
                        try {
                            router = as.getFactory().getAction(as.getNombreClaseRecurso(listarConvocatorias), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex1) {
                            Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        } catch (InstantiationException ex1) {
                            Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        } catch (IllegalAccessException ex1) {
                            Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        }
                    }
                } else {
                    try {
                        router = as.getFactory().getAction(as.getNombreClaseRecurso(listarConvocatorias), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            } else {
                try {
                    router = as.getFactory().getAction(as.getNombreClaseRecurso(listarConvocatorias), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InstantiationException ex) {
                    Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(VisualizarConvocatoriaAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        } else {
            router = new AccionRouter("inicio", false);
        }

        return router;
    }
}
